1 // Copyright (c) 2012-2013 Rotorz Limited. All rights reserved.
2 // Use of
this source code is governed by a BSD-style license that can be
3 // found
in the LICENSE file.
4
5 using
UnityEngine;
6 using
UnityEditor;
7
8 using
System;
9
10 namespace
Rotorz.ReorderableList.Internal
11 {

12
13     ///
<summary>
14     ///
Resources to assist with reorderable list control.
15     ///
</summary>
16     
internal static class ReorderableListResources
17     {
18
19         
static ReorderableListResources()
20         {
21             GenerateSpecialTextures();
22             LoadResourceAssets();
23         }
24
25         
#region Texture Resources
26
27         
private enum ResourceName
28         {
29             add_button =
0,
30             add_button_active,
31             container_background,
32             grab_handle,
33             remove_button,
34             remove_button_active,
35             title_background,
36         }

37
38         ///
<summary>
39         ///
Resource assets for light skin.
40         ///
</summary>
41         ///
<remarks>
42         ///
<para>Resource assets are PNG images which have been encoded using a base-64
43         ///
string so that actual asset files are not necessary.</para>
44         ///
</remarks>
45         
private static string[] s_LightSkin = {
46             
"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAW0lEQVRIS+3NywnAQAhF0anI4mzVCmzBBl7QEBgGE5JFhBAXd+OHM5gZZgYRKcktNxu+HRFF2e6qhtOjtQM7K/tZ+xY89wSbazg9eqOfw6oag4rcChjY8coAjA2l1RxFDY8IFAAAAABJRU5ErkJggg==",
47             
"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpiFBER+f/jxw8GNjY2BnqAX79+MXBwcDAwMQwQGHoWnzp1CoxHjo8pBSykBi8+MTMzs2HmY2QfwXxKii9HExdZgNwgHuFB/efPH7pZCLOL8f///wyioqL/6enbL1++MAIEGABvGSLA+9GPZwAAAABJRU5ErkJggg==",
48             
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAMElEQVQYV2P4//8/Q1FR0X8YBvHBAp8+ffp/+fJlMA3igwUfPnwIFgDRYEFM7f8ZAG1EOYL9INrfAAAAAElFTkSuQmCC",
49             
"iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFCAYAAACXU8ZrAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAIElEQVQYV2P49OnTf0KYobCw8D8hzPD/P2FMLesK/wMAs5yJpK+6aN4AAAAASUVORK5CYII=",
50             
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAACCAIAAADq9gq6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUeNpiVFZWZsAGmBhwAIAAAwAURgBt4C03ZwAAAABJRU5ErkJggg==",
51             
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAACCAIAAADq9gq6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUeNpivHPnDgM2wMSAAwAEGAB8VgKYlvqkBwAAAABJRU5ErkJggg==",
52             
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpi/P//P0NxcfF/BgRgZP78+fN/VVVVhpCQEAZjY2OGs2fPNrCApBwdHRkePHgAVwoWnDVrFgMyAAgwAAt4E1dCq1obAAAAAElFTkSuQmCC"
53         };

54         ///
<summary>
55         ///
Resource assets for dark skin.
56         ///
</summary>
57         ///
<remarks>
58         ///
<para>Resource assets are PNG images which have been encoded using a base-64
59         ///
string so that actual asset files are not necessary.</para>
60         ///
</remarks>
61         
private static string[] s_DarkSkin = {
62             
"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiVFZW/u/i4sLw4sULBnoACQkJhj179jAwMQwQGHoWl5aWgvHI8TGlgIXU4MUn1t3dPcx8HB8fD2cvXLgQQ0xHR4c2FmMzmBTLhl5QYwt2cn1MtsXkWjg4gvrt27fgWoMeAGQXCDD+//+fQUVF5T89fXvnzh1GgAADAFmSI1Ed3FqgAAAAAElFTkSuQmCC",
63             
"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUeNpiFBER+f/jxw8GNjY2BnqAX79+MXBwcDAwMQwQGHoWv3nzBoxHjo8pBSykBi8+MWAOGWY+5uLigrO/ffuGIYbMppnF5Fg2tFM1yKfk+pbkoKZGEA+OVP3nzx+6WQizi/H///8MoqKi/+np2y9fvjACBBgAoTYjgvihfz0AAAAASUVORK5CYII=",
64             
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpi/P//P4OKisp/Bii4c+cOIwtIwMXFheHFixcMEhISYAVMINm3b9+CBUA0CDCiazc0NGQECDAAdH0YelA27kgAAAAASUVORK5CYII=",
65             
"iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFCAYAAACXU8ZrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpizM3N/c9AADAqKysTVMTi5eXFSFAREFPHOoAAAwBCfwcAO8g48QAAAABJRU5ErkJggg==",
66             
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi/P//PwM+wHL06FG8KpgYCABGZWVlvCYABBgA7/sHvGw+cz8AAAAASUVORK5CYII=",
67             
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi/P//PwM+wPKfgAomBgKAhYuLC68CgAADAAxjByOjCHIRAAAAAElFTkSuQmCC",
68             
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADtJREFUeNpi/P//P4OKisp/Bii4c+cOIwtIQE9Pj+HLly9gQRCfBcQACbx69QqmmAEseO/ePQZkABBgAD04FXsmmijSAAAAAElFTkSuQmCC"
69         };

70
71         ///
<summary>
72         ///
Gets light or dark texture "add_button.png".
73         ///
</summary>
74         
public static Texture2D texAddButton
75         {
76             
get { return s_Cached[ (int)ResourceName.add_button ]; }
77         }

78         ///
<summary>
79         ///
Gets light or dark texture "add_button_active.png".
80         ///
</summary>
81         
public static Texture2D texAddButtonActive
82         {
83             
get { return s_Cached[ (int)ResourceName.add_button_active ]; }
84         }

85         ///
<summary>
86         ///
Gets light or dark texture "container_background.png".
87         ///
</summary>
88         
public static Texture2D texContainerBackground
89         {
90             
get { return s_Cached[ (int)ResourceName.container_background ]; }
91         }

92         ///
<summary>
93         ///
Gets light or dark texture "grab_handle.png".
94         ///
</summary>
95         
public static Texture2D texGrabHandle
96         {
97             
get { return s_Cached[ (int)ResourceName.grab_handle ]; }
98         }

99         ///
<summary>
100         ///
Gets light or dark texture "remove_button.png".
101         ///
</summary>
102         
public static Texture2D texRemoveButton
103         {
104             
get { return s_Cached[ (int)ResourceName.remove_button ]; }
105         }

106         ///
<summary>
107         ///
Gets light or dark texture "remove_button_active.png".
108         ///
</summary>
109         
public static Texture2D texRemoveButtonActive
110         {
111             
get { return s_Cached[ (int)ResourceName.remove_button_active ]; }
112         }

113         ///
<summary>
114         ///
Gets light or dark texture "title_background.png".
115         ///
</summary>
116         
public static Texture2D texTitleBackground
117         {
118             
get { return s_Cached[ (int)ResourceName.title_background ]; }
119         }
120
121         
#endregion
122
123         
#region Generated Resources
124
125         
public static Texture2D texItemSplitter { get; private set; }
126
127         ///
<summary>
128         ///
Generate special textures.
129         ///
</summary>
130         
private static void GenerateSpecialTextures()
131         {
132             
var splitterColor = EditorGUIUtility.isProSkin
133                 ?
new Color( 1f, 1f, 1f, 0.14f )
134                 :
new Color( 0.59f, 0.59f, 0.59f, 0.55f )
135                 ;
136             texItemSplitter = CreatePixelTexture(
"(Generated) Item Splitter", splitterColor );
137         }

138
139         ///
<summary>
140         ///
Create 1x1 pixel texture of specified color.
141         ///
</summary>
142         ///
<param name="name">Name for texture object.</param>
143         ///
<param name="color">Pixel color.</param>
144         ///
<returns>
145         ///
The new <c>Texture2D</c> instance.
146         ///
</returns>
147         
public static Texture2D CreatePixelTexture( string name, Color color )
148         {
149             
var tex = new Texture2D( 1, 1, TextureFormat.ARGB32, false, true );
150             tex.name = name;
151             tex.hideFlags = HideFlags.HideAndDontSave;
152             tex.filterMode = FilterMode.Point;
153             tex.SetPixel(
0, 0, color );
154             tex.Apply();
155             
return tex;
156         }
157
158         
#endregion
159
160         
#region Load PNG from Base-64 Encoded String
161
162         
private static Texture2D[] s_Cached;
163
164         ///
<summary>
165         ///
Read textures from base-64 encoded strings. Automatically selects assets based
166         ///
upon whether the light or dark (pro) skin is active.
167         ///
</summary>
168         
private static void LoadResourceAssets()
169         {
170             
var skin = EditorGUIUtility.isProSkin ? s_DarkSkin : s_LightSkin;
171             s_Cached =
new Texture2D[ skin.Length ];
172
173             
for( int i = 0; i < s_Cached.Length; ++i )
174             {
175                 
// Get image data (PNG) from base64 encoded strings.
176                 
byte[] imageData = Convert.FromBase64String( skin[ i ] );
177
178                 
// Gather image size from image data.
179                 
int texWidth, texHeight;
180                 GetImageSize( imageData,
out texWidth, out texHeight );
181
182                 
// Generate texture asset.
183                 
var tex = new Texture2D( texWidth, texHeight, TextureFormat.ARGB32, false, true );
184                 tex.hideFlags = HideFlags.HideAndDontSave;
185                 tex.name =
"(Generated) ReorderableList:" + i;
186                 tex.filterMode = FilterMode.Point;
187                 tex.LoadImage( imageData );
188
189                 s_Cached[ i ] = tex;
190             }
191
192             s_LightSkin =
null;
193             s_DarkSkin =
null;
194         }

195
196         ///
<summary>
197         ///
Read width and height if PNG file in pixels.
198         ///
</summary>
199         ///
<param name="imageData">PNG image data.</param>
200         ///
<param name="width">Width of image in pixels.</param>
201         ///
<param name="height">Height of image in pixels.</param>
202         
private static void GetImageSize( byte[] imageData, out int width, out int height )
203         {
204             width = ReadInt( imageData,
3 + 15 );
205             height = ReadInt( imageData,
3 + 15 + 2 + 2 );
206         }
207
208         
private static int ReadInt( byte[] imageData, int offset )
209         {
210             
return ( imageData[ offset ] << 8 ) | imageData[ offset + 1 ];
211         }
212
213         
#endregion
214
215         
#region GUI Helper
216         
private static GUIStyle s_TempStyle = new GUIStyle();
217
218         ///
<summary>
219         ///
Draw texture using <see cref="GUIStyle"/> to workaround bug in Unity where
220         ///
<see cref="GUI.DrawTexture"/> flickers when embedded inside a property drawer.
221         ///
</summary>
222         ///
<param name="position">Position of which to draw texture in space of GUI.</param>
223         ///
<param name="texture">Texture.</param>
224         
public static void DrawTexture( Rect position, Texture2D texture )
225         {
226             
if( Event.current.type != EventType.Repaint )
227                 
return;
228
229             s_TempStyle.normal.background = texture;
230
231             s_TempStyle.Draw( position, GUIContent.none,
false, false, false, false );
232         }
233         
#endregion
234
235     }
236
237 }


Copyright (c) 2012-2013 Rotorz Limited. All rights reserved.

Use of this source code is governed by a BSD-style license that can be

found in the LICENSE file.

Resources to assist with reorderable list control.

Resource assets for light skin.

Resource assets are PNG images which have been encoded using a base-64

string so that actual asset files are not necessary.

"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOsSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpiFBER+fjxw8GNjY2BnqAX79+MXBwcDAwMQwQGHoWnzp1CoxHjo8pBSykBi8+MTMzs2HmY2QfwXxKii9HExdZgNwgHuFBefPH7pZCLOL8fwyioqL6enbL1++MAIEGABvGSLA+9GPZwAAAABJRU5ErkJggg==",

"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGMVAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAMElEQVQYV2P48Q1FR0X8YBvHBAp8+ffp+fJlMA3igwUfPnwIFgDRYEFM7f8ZAG1EOYL9INrfAAAAAElFTkSuQmCC",

"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGMVAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpiPP0NxcfFBgRgZP78+fNVVVVhpCQEAZjY2OGs2fPNrCApBwdHRkePHgAVwoWnDVrFgMyAAgwAAt4E1dCq1obAAAAAElFTkSuQmCC"

Resource assets for dark skin.

Resource assets are PNG images which have been encoded using a base-64

string so that actual asset files are not necessary.

"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOsSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiVFZWui4sLw4sULBnoACQkJhj179jAwMQwQGHoWl5aWgvHI8TGlgIXU4MUn1t3dPcx8HB8fD2cvXLgQQ0xHR4c2FmMzmBTLhl5QYwt2cn1MtsXkWjg4gvrt27fgWoMeAGQXCDD++fQUVF5T89fXvnzh1GgAADAFmSI1Ed3FqgAAAAAElFTkSuQmCC",

"iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOsSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUeNpiFBER+fjxw8GNjY2BnqAX79+MXBwcDAwMQwQGHoWv3nzBoxHjo8pBSykBi8+MWAOGWY+5uLigrOffuGIYbMppnF5Fg2tFM1yKfk+pbkoKZGEA+OVP3nzx+6WQiziH8MoqKi+np2y9fvjACBBgAoTYjgvihfz0AAAAASUVORK5CYII=",

"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGMVAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiPP4OKispBii4c+cOIwtIwMXFheHFixcMEhISYAVMINm3b9+CBUA0CDCiazc0NGQECDAAdH0YelA27kgAAAAASUVORK5CYII=",

"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpiPPwM+wHL06FG8KpgYCABGZWVlvCYABBgA7sHvGw+cz8AAAAASUVORK5CYII=",

"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAECAYAAACzzX7wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpiPPwM+wPKfgAomBgKAhYuLC68CgAADAAxjByOjCHIRAAAAAElFTkSuQmCC",

"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGMVAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADtJREFUeNpiPP4OKispBii4c+cOIwtIQE9Pj+HLly9gQRCfBcQACbx69QqmmAEseOePQZkABBgAD04FXsmmijSAAAAAElFTkSuQmCC"

Gets light or dark texture "add_button.png".

Gets light or dark texture "add_button_active.png".

Gets light or dark texture "container_background.png".

Gets light or dark texture "grab_handle.png".

Gets light or dark texture "remove_button.png".

Gets light or dark texture "remove_button_active.png".

Gets light or dark texture "title_background.png".

Generate special textures.

Create 1x1 pixel texture of specified color.

Name for texture object.

Pixel color.

The new Texture2D instance.

Read textures from base-64 encoded strings. Automatically selects assets based

upon whether the light or dark (pro) skin is active.

Get image data (PNG) from base64 encoded strings.

Gather image size from image data.

Generate texture asset.

Read width and height if PNG file in pixels.

PNG image data.

Width of image in pixels.

Height of image in pixels.

Draw texture using to workaround bug in Unity where

flickers when embedded inside a property drawer.

Position of which to draw texture in space of GUI.

Texture.




Trò chơi Tic-Tac-Toe, game đánh caro full source code 53.549 lượt xem

Gõ tìm kiếm nhanh...